Microcontrollers function to replace mechanical and electromechanical components in a variety of applications and devices. Microcontrollers have evolved since they were first introduced approximately 30 years ago, to the point where they can be used for increasingly complex applications. Some microcontrollers in use today are also programmable, expanding the number of applications in which they can be used.
However, even though there are a large number of different types of microcontrollers available on the market with a seemingly wide range of applicability, it is still often difficult for a designer to find a microcontroller that is particularly suited for a particular application. Unique aspects of the intended application may make it difficult to find an optimum microcontroller, perhaps necessitating a compromise between the convenience of using an existing microcontroller design and less than optimum performance.
In those cases in which a suitable microcontroller is found, subsequent changes to the application and new requirements placed on the application will likely affect the choice of microcontroller. The designer thus again faces the challenge of finding a suitable microcontroller for the intended application.
One solution to the problems described above is to design (or have designed) a microcontroller customized for the intended application. However, this solution may still not be practical because of the time needed to develop a custom microcontroller and the cost of doing so. In addition, should the design of the intended application be changed, it may also be necessary to change the design of the custom microcontroller, further increasing costs and lead times. Moreover, the option of designing a custom microcontroller is generally only available to very large volume customers.
Application specific integrated circuits (ASICs) may suggest a solution to the problem of finding a suitable microcontroller for an application. However, ASICs can also be problematic because they require a sophisticated level of design expertise, and the obstacles of long development times, high costs, and large volume requirements still remain. Solutions such as gate arrays and programmable logic devices provide flexibility, but they too are expensive and require a sophisticated level of design expertise.
In an effort to overcome some of these disadvantages, some microcontroller suppliers (for example, Cypress MicroSystems in Bothell, Wash.) have started to offer standard parts that combine a microprocessor with several user-configurable “building blocks.” These building blocks may be configured to form many standard microprocessor peripherals, as well as to form unique peripherals as may be required by a specific application. Thus, a user of such products may be able to tailor (or configure) such a standard product to meet his specific microcontroller requirements, in less time and at less cost than through other means.
Unfortunately, the process by which such configurable blocks are configured is burdensome. The configurable blocks are designed to have wide application. As such, configuration generally involves setting a large number of bits in a specific sequence in order to define a specific function and interconnection with other blocks.
Many existing microcontrollers also have numerous configuration settings. For example, it is not unusual for a given input/output port to be designed such that it is either input or output, and it may further have a selectable pull up resistor.
In the prior art, the configuration process for both standard microcontrollers and configurable microcontrollers has been similar. A designer would study the device's information data sheets and manually determine the value and order of a long string of bits that would create the desired configuration. Subsequently, this string would be encoded into microprocessor instructions for execution during the early stages of operation, or initialization of the system.
In a very few instances, when a microcontroller has found very high acceptance in a particular application, high level tools have been created to support that particular microcontroller in that particular application. In such cases, a standard configuration is used and various software tools are built based on the standard configuration.
Unfortunately, in most design situations calling for a microcontroller, this is not the case. Configuration has been, for the most part, a labor-intensive manual process. Further, changes in the hardware configuration tend to ripple through to the higher level software, requiring changes and recompilation of application software as well as in any software tools designed to ease the development process. In effect, if the microcontroller hardware changed, the software had to change. Not just the application specific software, but also the software tools (such as compilers) had to change.